AWS LambdaでContentfulの記事を取得する(Python)
Contentfulの更新をHookにLambdaを起動してコンテンツを取得することがあったので、その方法を紹介します。
実装
Python パッケージインストール
pip install contentful
Pythonコード
# -*- coding: utf-8 -*- from contentful import Client import os ctfl_space_id = os.environ['CONTENTFUL_SPACE_ID'] ctfl_cda_key = os.environ['CONTENTFUL_ACCESS_TOKEN'] ctfl_env = os.environ['CONTENTFUL_ENVIRONMENT'] ctfl_entry_id = os.environ['CONTENTFUL_ENTORY_ID'] def lambda_handler(event, context): client = Client( ctfl_space_id, ctfl_cda_key, environment=ctfl_env ) entry = client.entry(ctfl_entry_id) return entry.fields()
Lambdaに環境変数登録
ContentfulのDelivery APIトークンなどはLambdaの環境変数に格納します。
- CONTENTFUL_SPACE_ID ... ContentfulのSpace IDを入力
- CONTENTFUL_ACCESS_TOKEN ... Contentfulの[API Keys]からCDA(Content Delivery API)を発行して入力
- CONTENTFUL_ENVIRONMENT ... デフォルトのままであれば master で大丈夫です
- CONTENTFUL_ENTORY_ID ... Entry編集画面の右サイドバー[info]から取得できます。
ちなみにContentful側はこんな↓モデリングにしています。
以上の準備が完了し、Lambda関数を実行すると、以下のようなjsonが帰ってくるはず。
{'title': '記事のタイトル', 'slug': 'sample-post-slug', 'thumbnail': , 'content_md': '## 記事の見出し\n記事の本文。'}
Content modelは特に指定せずに、エントリーID一発指定で行けるのがいい感じ。
ContentfulのCMA(Content Management API)を使って言語的な処理をPythonでして再格納とかできますね。